package dziennik.classes;
import dziennik.classes.*;

import java.sql.Date;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import javax.faces.application.Application;
import javax.faces.component.UISelectItem;
import javax.faces.component.UISelectMany;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
import javax.faces.model.SelectItem;

/**
 * 
 * <p>
 * Klasa Administrator obrazuje administratora, jej zadaniem jest dodawanie, usuwanie oraz edycja 
 * uczniow, nauczycieli oraz dziennikow.
 * </p>
 * 
 * @author Dariusz Matejkowski / Dominik Kaminski
 *
 */

public class Administrator extends Uzytkownik{

    // DKA - konstruktor bezparametrowy (warunek ziarna)
    public Administrator() {
    }
    
	//konstruktor administratora
	public Administrator
	(
			String imie,
			String nazwisko,
			String login,
			String haslo
	)
	{
		super(
				imie,
				nazwisko,
				login,
				haslo	
				);
	}
	
        ArrayList<SelectItem> lista_uczniow = new ArrayList<SelectItem>();
        ArrayList<SelectItem> lista_dziennikow = new ArrayList<SelectItem>();
        ArrayList<SelectItem> lista_nauczycieli = new ArrayList<SelectItem>();
        ArrayList<SelectItem> lista_przedmiotow_in = new ArrayList<SelectItem>();
        ArrayList<String> lista_przedmiotow = new ArrayList<String>();
        SelectItem brak = new SelectItem(" ", "brak");
        int id_wybranego_ucznia;
        String nazwa_wybranego_dziennika;
        int id_wybranego_nauczyciela;
        String nowy_dziennik_nr;
        String nowy_dziennik_l;
        String nowy_dziennik_rok;
        Nauczyciel nauczyciel = new Nauczyciel();
        private int id_wybranego_przedmiotu;
        ArrayList<String> uprawnienia = new ArrayList<String>();
        ArrayList<SelectItem> dni = new ArrayList<SelectItem>();
        ArrayList<SelectItem> mies = new ArrayList<SelectItem>();
        ArrayList<SelectItem> lata = new ArrayList<SelectItem>();
        ArrayList<SelectItem> lata2 = new ArrayList<SelectItem>();
        int dodano;
        

    public String getNazwa_wybranego_dziennika() {
        return nazwa_wybranego_dziennika;
    }

    public void setNazwa_wybranego_dziennika(String nazwa_wybranego_dziennika) {
        this.nazwa_wybranego_dziennika = nazwa_wybranego_dziennika;
    }

    public int getId_wybranego_nauczyciela() {
        return id_wybranego_nauczyciela;
    }

    public void setId_wybranego_nauczyciela(int id_wybranego_nauczyciela) {
        this.id_wybranego_nauczyciela = id_wybranego_nauczyciela;
    }

    public int getId_wybranego_ucznia() {
        return id_wybranego_ucznia;
    }

    public void setId_wybranego_ucznia(int id_wybranego_ucznia) {
        this.id_wybranego_ucznia = id_wybranego_ucznia;
    }

    public ArrayList<SelectItem> getLista_dziennikow() {
        return lista_dziennikow;
    }

    public void setLista_dziennikow(ArrayList<SelectItem> lista_dziennikow) {
        this.lista_dziennikow = lista_dziennikow;
    }

    public ArrayList<SelectItem> getLista_nauczycieli() {
        return lista_nauczycieli;
    }

    public void setLista_nauczycieli(ArrayList<SelectItem> lista_nauczycieli) {
        this.lista_nauczycieli = lista_nauczycieli;
    }

    public ArrayList<SelectItem> getLista_uczniow() {
        return lista_uczniow;
    }

    public void setLista_uczniow(ArrayList<SelectItem> lista_uczniow) {
        this.lista_uczniow = lista_uczniow;
    }

    public String getNowy_dziennik_l() {
        return nowy_dziennik_l;
    }

    public void setNowy_dziennik_l(String nowy_dziennik_l) {
        this.nowy_dziennik_l = nowy_dziennik_l;
    }

    public String getNowy_dziennik_nr() {
        return nowy_dziennik_nr;
    }

    public void setNowy_dziennik_nr(String nowy_dziennik_nr) {
        this.nowy_dziennik_nr = nowy_dziennik_nr;
    }

    public String getNowy_dziennik_rok() {
        return nowy_dziennik_rok;
    }

    public void setNowy_dziennik_rok(String nowy_dziennik_rok) {
        this.nowy_dziennik_rok = nowy_dziennik_rok;
    }

    public int getId_wybranego_przedmiotu() {
        return id_wybranego_przedmiotu;
    }

    public void setId_wybranego_przedmiotu(int id_wybranego_przedmiotu) {
        this.id_wybranego_przedmiotu = id_wybranego_przedmiotu;
    }

    public Nauczyciel getNauczyciel() {
        return nauczyciel;
    }

    public void setNauczyciel(Nauczyciel nauczyciel) {
        this.nauczyciel = nauczyciel;
    }

    public ArrayList<SelectItem> getLista_przedmiotow_in() {
        return lista_przedmiotow_in;
    }

    public void setLista_przedmiotow_in(ArrayList<SelectItem> lista_przedmiotow_in) {
        this.lista_przedmiotow_in = lista_przedmiotow_in;
    }

    public SelectItem getBrak() {
        return brak;
    }

    public void setBrak(SelectItem brak) {
        this.brak = brak;
    }

    public ArrayList<java.lang.String> getUprawnienia() {
        return uprawnienia;
    }

    public void setUprawnienia(ArrayList<java.lang.String> uprawnienia) {
        this.uprawnienia = uprawnienia;
    }

    public ArrayList<String> getLista_przedmiotow() {
        return lista_przedmiotow;
    }

    public void setLista_przedmiotow(ArrayList<String> lista_przedmiotow) {
        this.lista_przedmiotow = lista_przedmiotow;
    }

    public ArrayList<SelectItem> getDni() {
        return dni;
    }

    public void setDni(ArrayList<SelectItem> dni) {
        this.dni = dni;
    }

    public ArrayList<SelectItem> getLata() {
        return lata;
    }

    public void setLata(ArrayList<SelectItem> lata) {
        this.lata = lata;
    }

    public ArrayList<SelectItem> getMies() {
        return mies;
    }

    public void setMies(ArrayList<SelectItem> mies) {
        this.mies = mies;
    }

    public int getDodano() {
        return dodano;
    }

    public void setDodano(int dodano) {
        this.dodano = dodano;
    }

    public ArrayList<SelectItem> getLata2() {
        return lata2;
    }

    public void setLata2(ArrayList<SelectItem> lata2) {
        this.lata2 = lata2;
    }
    
    
    
 public String wypelnij_liste_przedmiotow() {
                lista_przedmiotow_in.clear();
		lista_przedmiotow_in.add(new SelectItem(0,"Język polski"));
		lista_przedmiotow_in.add(new SelectItem(1,"Matematyka"));
		lista_przedmiotow_in.add(new SelectItem(2,"Fizyka"));
		lista_przedmiotow_in.add(new SelectItem(3,"Chemia"));
		lista_przedmiotow_in.add(new SelectItem(4,"Technika"));
		lista_przedmiotow_in.add(new SelectItem(5,"Biologia"));
		lista_przedmiotow_in.add(new SelectItem(6,"Geografia"));
		lista_przedmiotow_in.add(new SelectItem(7,"Wiedza o społeczeństwie"));
		lista_przedmiotow_in.add(new SelectItem(8,"Historia"));
		lista_przedmiotow_in.add(new SelectItem(9,"Informatyka"));
		lista_przedmiotow_in.add(new SelectItem(10,"Sztuka"));
		lista_przedmiotow_in.add(new SelectItem(11,"Wychowanie do ż.w.r"));
		lista_przedmiotow_in.add(new SelectItem(12,"Wychowanie fizyczne"));
		lista_przedmiotow_in.add(new SelectItem(13,"Język angielski"));
		lista_przedmiotow_in.add(new SelectItem(14,"Język niemiecki"));
		lista_przedmiotow_in.add(new SelectItem(15,"Religia"));
     return null;
 }   

  public void wypelnij_liste_przedmiotow_s() {
                lista_przedmiotow.clear();
		lista_przedmiotow.add("Język polski");
		lista_przedmiotow.add("Matematyka");
		lista_przedmiotow.add("Fizyka");
		lista_przedmiotow.add("Chemia");
		lista_przedmiotow.add("Technika");
		lista_przedmiotow.add("Biologia");
		lista_przedmiotow.add("Geografia");
		lista_przedmiotow.add("Wiedza o społeczeństwie");
		lista_przedmiotow.add("Historia");
		lista_przedmiotow.add("Informatyka");
		lista_przedmiotow.add("Sztuka");
		lista_przedmiotow.add("Wychowanie do ż.w.r");
		lista_przedmiotow.add("Wychowanie fizyczne");
		lista_przedmiotow.add("Język angielski");
		lista_przedmiotow.add("Język niemiecki");
		lista_przedmiotow.add("Religia");
 }
  
 public String wypelnij_pola_daty() {
                dni.clear();
                mies.clear();
                lata.clear();
		dni.add(new SelectItem(1,"1"));
                dni.add(new SelectItem(2,"2"));
                dni.add(new SelectItem(3,"3"));
                dni.add(new SelectItem(4,"4"));
                dni.add(new SelectItem(5,"5"));
                dni.add(new SelectItem(6,"6"));
                dni.add(new SelectItem(7,"7"));
                dni.add(new SelectItem(8,"8"));
                dni.add(new SelectItem(9,"9"));
                dni.add(new SelectItem(10,"10"));
                dni.add(new SelectItem(11,"11"));
                dni.add(new SelectItem(12,"12"));
                dni.add(new SelectItem(13,"13"));
                dni.add(new SelectItem(14,"14"));
                dni.add(new SelectItem(15,"15"));
                dni.add(new SelectItem(16,"16"));
                dni.add(new SelectItem(17,"17"));
                dni.add(new SelectItem(18,"18"));
                dni.add(new SelectItem(19,"19"));
                dni.add(new SelectItem(20,"20"));
                dni.add(new SelectItem(21,"21"));
                dni.add(new SelectItem(22,"22"));
                dni.add(new SelectItem(23,"23"));
                dni.add(new SelectItem(24,"24"));
                dni.add(new SelectItem(25,"25"));
                dni.add(new SelectItem(26,"26"));
                dni.add(new SelectItem(27,"27"));
                dni.add(new SelectItem(28,"28"));
                dni.add(new SelectItem(29,"29"));
                dni.add(new SelectItem(30,"30"));
                dni.add(new SelectItem(31,"31"));
                mies.add(new SelectItem(1,"1"));
                mies.add(new SelectItem(12,"2"));
                mies.add(new SelectItem(13,"3"));
                mies.add(new SelectItem(14,"4"));
                mies.add(new SelectItem(15,"5"));
                mies.add(new SelectItem(16,"6"));
                mies.add(new SelectItem(17,"7"));
                mies.add(new SelectItem(18,"8"));
                mies.add(new SelectItem(19,"9"));
                mies.add(new SelectItem(10,"10"));
                mies.add(new SelectItem(11,"11"));
                mies.add(new SelectItem(12,"12"));
                lata.add(new SelectItem(1990, "1990"));
                lata.add(new SelectItem(1991, "1991"));
                lata.add(new SelectItem(1992, "1992"));
                lata.add(new SelectItem(1993, "1993"));
                lata.add(new SelectItem(1994, "1994"));
                lata.add(new SelectItem(1995, "1995"));
                lata.add(new SelectItem(1996, "1996"));
                lata.add(new SelectItem(1997, "1997"));
                lata.add(new SelectItem(1998, "1998"));
                lata.add(new SelectItem(1999, "1999"));
                lata.add(new SelectItem(2000, "2000"));
                lata.add(new SelectItem(2001, "2001"));
                lata.add(new SelectItem(2002, "2002"));
                lata.add(new SelectItem(2003, "2003"));
                lata.add(new SelectItem(2004, "2004"));
                lata.add(new SelectItem(2005, "2005"));
                lata.add(new SelectItem(2006, "2006"));
                
     return null;
 }
    
 public String wypelnij_pola_lat() {
                lata2.clear();
                lata2.add(new SelectItem(1990, "1990"));
                lata2.add(new SelectItem(1991, "1991"));
                lata2.add(new SelectItem(1992, "1992"));
                lata2.add(new SelectItem(1993, "1993"));
                lata2.add(new SelectItem(1994, "1994"));
                lata2.add(new SelectItem(1995, "1995"));
                lata2.add(new SelectItem(1996, "1996"));
                lata2.add(new SelectItem(1997, "1997"));
                lata2.add(new SelectItem(1998, "1998"));
                lata2.add(new SelectItem(1999, "1999"));
                lata2.add(new SelectItem(2000, "2000"));
                lata2.add(new SelectItem(2001, "2001"));
                lata2.add(new SelectItem(2002, "2002"));
                lata2.add(new SelectItem(2003, "2003"));
                lata2.add(new SelectItem(2004, "2004"));
                lata2.add(new SelectItem(2005, "2005"));
                lata2.add(new SelectItem(2006, "2006"));
                lata2.add(new SelectItem(2007, "2007"));
                lata2.add(new SelectItem(2008, "2008"));
                lata2.add(new SelectItem(2009, "2009"));
                lata2.add(new SelectItem(2010, "2010"));
                lata2.add(new SelectItem(2011, "2011"));
                lata2.add(new SelectItem(2012, "2012"));
                lata2.add(new SelectItem(2013, "2013"));
                
     return null;
 }

    
public String pobierz_uczniow() {
    lista_uczniow.clear();
    ResultSet rs = Polaczenie.MySQL_zapytanie("select id, imie, nazwisko from uczen");
		try
		{
			rs.last();
			int rowCount = rs.getRow();
			rs.first();
			int i=0;
			do {
				int id = rs.getInt("id");
				String text = ""+id+". "+rs.getString("imie")+" "+rs.getString("nazwisko");
                                // DKA dodanie ucznia do listy uczniow
				lista_uczniow.add(new SelectItem(id,text));
//                                System.out.println(lista_uczniów.size());
//                                lista_uczniow.get(lista_uczniow.size()-1).setItemLabel(text);
//                                lista_uczniow.get(lista_uczniow.size()-1).setValue(id);
				rs.next();
            }while (!rs.isAfterLast());
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
    return null;
}

public String pobierz_dzienniki() {
    lista_dziennikow.clear();
    try{
				ResultSet rs=Polaczenie.MySQL_zapytanie("select id, nazwa_dziennika from dzienniki");
				while(rs.next())
				{	
					lista_dziennikow.add(new SelectItem(rs.getString("nazwa_dziennika"),rs.getString("nazwa_dziennika")));
				}
			}		
			catch (SQLException e)
			{
				e.printStackTrace();
			}
    return null;
}

public String pobierz_nauczycieli() {
    lista_nauczycieli.clear();
    ResultSet rs = Polaczenie.MySQL_zapytanie("select id, imie, nazwisko from nauczyciele order by id"); 
		try
		{
			rs.last();
			int rowCount = rs.getRow()-1;
			rs.first();
			rs.next();	//ominiecie administratora - id=1
			int i=0;
			do
            {
				int id = rs.getInt("id");
				String text = ""+id+". "+rs.getString("imie")+" "+rs.getString("nazwisko");
				lista_nauczycieli.add(new SelectItem(id, text));
				rs.next();
            }while(!rs.isAfterLast());
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
    return null;
}

public String wczytaj_ucznia() {
    
     Uczen uczen_bean;
                
                // DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie ucznia)
                FacesContext facesContext2 = FacesContext.getCurrentInstance();
                Application application = facesContext2.getApplication();
                ValueBinding binding2 = application.createValueBinding("#{uczen}");
                uczen_bean = (Uczen)binding2.getValue(facesContext2);
    
    try{
            ResultSet rs=Polaczenie.MySQL_zapytanie("select id, imie, nazwisko, imie_rodzica, nazwisko_rodzica, adres_ucznia,"
                    + " adres_rodzica, pesel, data_urodzenia, miejsce_urodzenia, email, dziennik from uczen where id="+id_wybranego_ucznia);
            while(rs.next())
            {	
                    uczen_bean.setId(id_wybranego_ucznia);
                    uczen_bean.setImie(rs.getString("imie"));
                    uczen_bean.setNazwisko(rs.getString("nazwisko"));
                    uczen_bean.setImie_rodzica(rs.getString("imie_rodzica"));
                    uczen_bean.setNazwisko_rodzica(rs.getString("nazwisko_rodzica"));
                    uczen_bean.setAdres_ucznia(rs.getString("adres_ucznia"));
                    uczen_bean.setAdres_rodzica(rs.getString("adres_rodzica"));
                    uczen_bean.setPesel(rs.getLong("pesel"));
                    uczen_bean.setDzien_urodzenia(Integer.parseInt(rs.getString("data_urodzenia").substring(8, 10)));
                    uczen_bean.setMiesiac_urodzenia(Integer.parseInt(rs.getString("data_urodzenia").substring(5, 7)));
                    uczen_bean.setRok_urodzenia(Integer.parseInt(rs.getString("data_urodzenia").substring(0, 4)));
                    uczen_bean.setMiejsce_urodzenia(rs.getString("miejsce_urodzenia"));
                    uczen_bean.setEmail(rs.getString("email"));
                    uczen_bean.setStary_dziennik(rs.getString("dziennik"));
            }
        }		
        catch (SQLException e)
        {
                e.printStackTrace();
        }
    return "edycja_ucznia";
}

public String wczytaj_nauczyciela() {
    
    Polaczenie polaczenie_bean;
                
                // DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie polaczenia)
                FacesContext facesContext = FacesContext.getCurrentInstance();
                Application application = facesContext.getApplication();
                ValueBinding binding = application.createValueBinding("#{polaczenie}");
                polaczenie_bean = (Polaczenie)binding.getValue(facesContext);
    
    try{
            ResultSet rs=Polaczenie.MySQL_zapytanie("select id, imie, nazwisko, uprawnienia, wychowawca from nauczyciele where id="+id_wybranego_nauczyciela);
            while(rs.next())
            {	
                    nauczyciel.setId(id_wybranego_nauczyciela);
                    nauczyciel.setImie(rs.getString("imie"));
                    nauczyciel.setNazwisko(rs.getString("nazwisko"));
                    nauczyciel.setLista_uprawnien(polaczenie_bean.deserializuj(rs.getBytes("uprawnienia")));
                    System.out.println(nauczyciel.getLista_uprawnien().size());
                    nauczyciel.setWychowawca(rs.getString("wychowawca"));
            }
        }		
        catch (SQLException e)
        {
                e.printStackTrace();
        }
    podaj_uprawnienia();
    return "edycja_nauczyciela";
}

public String dodaj_uprawnienie() {
    nauczyciel.dodaj_do_listy_uprawnien(nazwa_wybranego_dziennika, id_wybranego_przedmiotu);
    return null;
}

public String wyczysc_uprawnienia() {
    nauczyciel.getLista_uprawnien().clear();
    uprawnienia.clear();
    return null;
}

public String wyczysc_dane_nauczyciela() {
    wyczysc_uprawnienia();
    nauczyciel = null;
    nauczyciel = new Nauczyciel();
    return null;
}

public String podaj_uprawnienia(){
    wypelnij_liste_przedmiotow_s();
    uprawnienia.clear();
    int i = 0;
    int j = 0;
    java.util.Iterator it = nauczyciel.getLista_uprawnien().iterator();
    while(it.hasNext()) {
        j=0;
        System.out.println("i="+i);
        it.next();
        uprawnienia.add(nauczyciel.getLista_uprawnien().get(i).getDziennik());
        java.util.Iterator it2 = nauczyciel.getLista_uprawnien().get(i).getUprawnienia_przedmioty().iterator();
        while(it2.hasNext()) {
            System.out.println("j="+j);
            it2.next();
            String temp = uprawnienia.get(uprawnienia.size()-1);
            uprawnienia.set(uprawnienia.size()-1, temp + " " + lista_przedmiotow.get(nauczyciel.getLista_uprawnien().get(i).getUprawnienia_przedmioty().get(j).intValue()));
            j++;            
        }
        i++;
    }
    return null;
}

/**
 * <p>metoda dodaj�ca nowego ucznia do bazy <p>
 * 
 * @param uczen
 * @param email
 * @param haslo
 */
		
public String nowy_uczen(){
    
    Polaczenie polaczenie_bean;
                
                // DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie polaczenia)
                FacesContext facesContext = FacesContext.getCurrentInstance();
                Application application = facesContext.getApplication();
                ValueBinding binding = application.createValueBinding("#{polaczenie}");
                polaczenie_bean = (Polaczenie)binding.getValue(facesContext);
                
    Uczen uczen_bean;
                
                // DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie ucznia)
                FacesContext facesContext2 = FacesContext.getCurrentInstance();
                ValueBinding binding2 = application.createValueBinding("#{uczen}");
                uczen_bean = (Uczen)binding2.getValue(facesContext2);
                
    dodano = 1;
    
    try
    {

            //formatowanie daty 
            SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
            String data = uczen_bean.getRok_urodzenia()+"/"+uczen_bean.getMiesiac_urodzenia()+"/"+uczen_bean.getDzien_urodzenia();
            java.util.Date utilData = format.parse(data);
            java.sql.Date data_urodzenia = new java.sql.Date(utilData.getTime());

 
            ResultSet rs = Polaczenie.MySQL_zapytanie("select max(id) from uczen as id");
            rs.first();
            int id=rs.getInt("max(id)")+1;		//pobieranie maxymalnego id z tabeli uczen i dodawanie 1 - id nowego ucznia
            uczen_bean.setId(id);
            uczen_bean.setStary_dziennik(nazwa_wybranego_dziennika);
            Statement st = polaczenie_bean.getConn().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            
            generateLoginAndPassword();
            
            rs = st.executeQuery("select * from uczen limit 0");

            rs.moveToInsertRow();
            rs.updateInt("id", id);
            rs.updateString("imie", uczen_bean.getImie());
            rs.updateString("nazwisko", uczen_bean.getNazwisko());
            rs.updateString("imie_rodzica", uczen_bean.getImie_rodzica());
            rs.updateString("nazwisko_rodzica", uczen_bean.getNazwisko_rodzica());
            rs.updateString("adres_ucznia", uczen_bean.getAdres_ucznia());
            rs.updateString("adres_rodzica", uczen_bean.getAdres_rodzica());
            rs.updateLong("pesel", uczen_bean.getPesel());

            rs.updateDate("data_urodzenia",data_urodzenia);
            rs.updateString("miejsce_urodzenia", uczen_bean.getMiejsce_urodzenia());

            rs.updateString("email", uczen_bean.getEmail());
            rs.updateString("login", uczen_bean.getLogin());
            rs.updateString("haslo", MD5.getMD5(uczen_bean.getHaslo()));
            rs.insertRow();
            
            dodaj_ucznia_do_dziennika();

            WysylanieEmaila we = new WysylanieEmaila();
            we.wyslij_maila(uczen_bean.getImie()+" "+uczen_bean.getNazwisko(), uczen_bean.getLogin(), uczen_bean.getHaslo(), uczen_bean.getEmail());
            
            return "dodano_ucznia";
    }
    catch (SQLException e)
    {
            e.printStackTrace();
            return "blad_dodawania_ucznia";
    }	
     catch (ParseException e) {
          System.out.println(e.toString());
          e.printStackTrace();
          return "blad_dodawania_ucznia";
        }
}


/**
 *  <p> Metoda usuwajaca ucznia z bazy <p>
 *  
 * @param id
 */
public String usun_ucznia_z_bazy(){
    
    Polaczenie polaczenie_bean;
                
                // DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie polaczenia)
                FacesContext facesContext = FacesContext.getCurrentInstance();
                Application application = facesContext.getApplication();
                ValueBinding binding = application.createValueBinding("#{polaczenie}");
                polaczenie_bean = (Polaczenie)binding.getValue(facesContext);
    
    try{
                ResultSet rs = Polaczenie.MySQL_zapytanie("SELECT * FROM uczen where id='" +id_wybranego_ucznia+"'");
                rs.first();

                String zapytanie;
                //usu� z dziennika

                zapytanie = "delete from uczen_dziennik where id_ucznia = "+ id_wybranego_ucznia ;
                polaczenie_bean.getSt().executeUpdate(zapytanie);

                //usu� z tabeli ucze�
                zapytanie = "delete from uczen where id='" +id_wybranego_ucznia+"'";
                polaczenie_bean.getSt().executeUpdate(zapytanie);
                
                return null;

        }
        catch (SQLException e)
        {
                e.printStackTrace();
                return null;
        }

        };

					
/**
 * 
 * <p> Metoda edytujaca dane ucznia istniejacego w bazie <p>
 * 
 * @param uczen
 * @param email
 */

public String edytuj_ucznia(){

    Uczen uczen_bean;
                
                // DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie ucznia)
                FacesContext facesContext2 = FacesContext.getCurrentInstance();
                Application application = facesContext2.getApplication();
                ValueBinding binding2 = application.createValueBinding("#{uczen}");
                uczen_bean = (Uczen)binding2.getValue(facesContext2);
                
                dodano = 1;
    
        try{
        //formatowanie daty
        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
        String data = uczen_bean.getRok_urodzenia()+"/"+uczen_bean.getMiesiac_urodzenia()+"/"+uczen_bean.getDzien_urodzenia();
        java.util.Date utilData = format.parse(data);
        java.sql.Date data_urodzenia = new java.sql.Date(utilData.getTime());

        uczen_bean.setNowy_dziennik(nazwa_wybranego_dziennika);
        ResultSet rs = Polaczenie.MySQL_zapytanie("SELECT * FROM uczen WHERE id="+uczen_bean.getId());

        rs.first();
        rs.updateString("imie", uczen_bean.getImie());
        rs.updateString("nazwisko", uczen_bean.getNazwisko());
        rs.updateString("imie_rodzica", uczen_bean.getImie_rodzica());
        rs.updateString("nazwisko_rodzica", uczen_bean.getNazwisko_rodzica());
        rs.updateString("adres_ucznia", uczen_bean.getAdres_ucznia());
        rs.updateString("adres_rodzica", uczen_bean.getAdres_rodzica());
        rs.updateLong("pesel", uczen_bean.getPesel());

        rs.updateDate("data_urodzenia",data_urodzenia);
        rs.updateString("miejsce_urodzenia", uczen_bean.getMiejsce_urodzenia());

        rs.updateRow();
        System.out.println("stary dziennik:" + uczen_bean.getStary_dziennik() + "nowy dziennik:");
        przenies_ucznia(uczen_bean.getStary_dziennik(), uczen_bean.getNowy_dziennik());
        
        return "zaktualizowano";

        }
        catch (SQLException e)
        {
                e.printStackTrace();
                return "blad_aktualizacji";
        }	
         catch (ParseException e) {
              System.out.println(e.toString());
              e.printStackTrace();
              return "blad_aktualizacji";
        }

};

		
/**
 * <p> Metoda dodajaca nauczyciela do bazy <p>
 * 
 * 		
 * @param nauczyciel
 */


public String dodaj_nauczyciela(){

    Polaczenie polaczenie_bean;

// DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie polaczenia)
FacesContext facesContext = FacesContext.getCurrentInstance();
Application application = facesContext.getApplication();
ValueBinding binding = application.createValueBinding("#{polaczenie}");
polaczenie_bean = (Polaczenie)binding.getValue(facesContext);

generateLoginAndPassword_n();

    try
        {
                ResultSet rs = Polaczenie.MySQL_zapytanie("SELECT max(id) FROM nauczyciele as id");
                rs.first();

                int id=rs.getInt("max(id)")+1;		//pobieranie maxymalnego id z tabeli nauczyciele i dodawanie 1 - id nowego nauczyciela
                Statement st = polaczenie_bean.getConn().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);


                rs = st.executeQuery("SELECT * FROM nauczyciele");
                
                while (rs.next())
                {
                    String im = rs.getString("imie");
                    String naz = rs.getString("nazwisko");
                    
                    if(nauczyciel.getImie().equals(im) && nauczyciel.getNazwisko().equals(naz))
                    {
                        dodano = 5;
                        return "nauczyciel_juz_istnieje";
                    }
                }

                rs.moveToInsertRow();
                rs.updateInt("id", id);
                rs.updateString("imie", nauczyciel.getImie());
                rs.updateString("nazwisko", nauczyciel.getNazwisko());
                rs.updateString("login", nauczyciel.getLogin());
                rs.updateString("haslo", MD5.getMD5(nauczyciel.getHaslo()));
                rs.updateObject("uprawnienia", polaczenie_bean.serializuj(nauczyciel.getLista_uprawnien()));
                rs.updateString("wychowawca", nauczyciel.getWychowawca());
                rs.insertRow();
                dodano = 3;
                return "dodano_nauczyciela";
        }
        catch (SQLException e)
        {
                e.printStackTrace();
                dodano = 3;
                return "blad_dodawania_nauczyciela";
        }		
}

		
/**
 * <p> Metoda edytujaca nauczyciela istniejacego w bazie <p>
 * 
 * 
 * @param nauczyciel
 */
	public String edytuj_nauczyciela(){
	
             Polaczenie polaczenie_bean;

                // DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie polaczenia)
                FacesContext facesContext = FacesContext.getCurrentInstance();
                Application application = facesContext.getApplication();
                ValueBinding binding = application.createValueBinding("#{polaczenie}");
                polaczenie_bean = (Polaczenie)binding.getValue(facesContext);

                System.out.println(nauczyciel.getId());
                
		try{
			ResultSet rs = Polaczenie.MySQL_zapytanie("SELECT * FROM nauczyciele WHERE id="+nauczyciel.getId());

			rs.first();
			rs.updateString("imie", nauczyciel.getImie());
			rs.updateString("nazwisko", nauczyciel.getNazwisko());
			rs.updateObject("uprawnienia", polaczenie_bean.serializuj(nauczyciel.getLista_uprawnien()));
			rs.updateString("wychowawca", nauczyciel.getWychowawca());
		
			rs.updateRow();
                        
                        wyczysc_dane_nauczyciela();

                        return "zaktualizowano";
		
		}
		catch (SQLException e)
		{
			e.printStackTrace();
                        wyczysc_dane_nauczyciela();
                        return "blad_aktualizacji";
		}	
	};

	
/**
 * <p> Metoda usuwa nauczyciela z bazy <p>
 * 
 */
	public String usun_nauczyciela(){
	
            Polaczenie polaczenie_bean;
                
                // DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie polaczenia)
                FacesContext facesContext = FacesContext.getCurrentInstance();
                Application application = facesContext.getApplication();
                ValueBinding binding = application.createValueBinding("#{polaczenie}");
                polaczenie_bean = (Polaczenie)binding.getValue(facesContext);
                
		try{
			
			String zapytanie = "DELETE FROM nauczyciele WHERE id='" +id_wybranego_nauczyciela+"'";
			polaczenie_bean.getSt().executeUpdate(zapytanie); 
                        return null;
		}
		catch (SQLException e)
		{
			e.printStackTrace();
                        return null;
		}	
	};

        
/**
* DKA - metoda przenosi ucznia z 'dziennik1' do 'dziennik2'
*/
public void przenies_ucznia(String dziennik1, String dziennik2) {
    Uczen uczen_bean;
                
                // DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie ucznia)
                FacesContext facesContext2 = FacesContext.getCurrentInstance();
                Application application = facesContext2.getApplication();
                ValueBinding binding2 = application.createValueBinding("#{uczen}");
                uczen_bean = (Uczen)binding2.getValue(facesContext2);
                
    int id_dziennika1;
    int id_dziennika2 = 0;
    
    try{
            ResultSet rs=Polaczenie.MySQL_zapytanie("select id from dzienniki where nazwa_dziennika='"+dziennik1+"'");
            while(rs.next())
            {	
                    id_dziennika1 = rs.getInt("id");
            }
            
            rs=Polaczenie.MySQL_zapytanie("select id from dzienniki where nazwa_dziennika='"+dziennik2+"'");
            while(rs.next())
            {	
                    id_dziennika2 = rs.getInt("id");
            }
            
            // update w tabeli uczen
            rs=Polaczenie.MySQL_zapytanie("select * from uczen where id="+uczen_bean.getId());
            rs.first();
            rs.updateString("dziennik", dziennik2);
            rs.updateRow();
            
            // update w tabeli uczen_dziennik
            rs=Polaczenie.MySQL_zapytanie("select * from uczen_dziennik where id_ucznia="+uczen_bean.getId());
            rs.first();
            rs.updateInt("id_dziennika", id_dziennika2);
            rs.updateRow();
    }		
    catch (SQLException e)
    {
            e.printStackTrace();
    }
}

/**
 * DKA - metoda dodająca nowy dziennik do bazy dzienników
 */
public String nowy_dziennik() {

    try{
		// dodanie dziennika do listy dziennik�w
		ResultSet rs_dzienniki = Polaczenie.MySQL_zapytanie("select * from dzienniki");
                
                while (rs_dzienniki.next())
                {
                    String nazwa = rs_dzienniki.getString("nazwa_dziennika");
                    String nowa_nazwa = "dziennik_" + nowy_dziennik_nr + nowy_dziennik_l
                            + "_" + nowy_dziennik_rok + (Integer.parseInt(nowy_dziennik_rok)+1);
                    
                    if(nazwa.equals(nowa_nazwa))
                    {
                        dodano = 4;
                        return "dziennik_juz_istnieje";
                    }
                }
                
		rs_dzienniki.moveToInsertRow();
		rs_dzienniki.updateString("nazwa_dziennika", "dziennik_"+nowy_dziennik_nr+nowy_dziennik_l+"_"+nowy_dziennik_rok+(Integer.parseInt(nowy_dziennik_rok)+1));
		rs_dzienniki.insertRow();
    }
    catch (SQLException e)
    {
            e.printStackTrace();
            dodano = 2;
            return "blad_dodawania_dziennika";
    }
    
    dodano = 2;
    return "dodano_dziennik";
}


/**
 * <p> Metoda dodaje dziennik do bazy <p>
 * 	
 * @param dz
 * @param id_dziennika
 */

//public void dodaj_dziennik(Dziennik dz, int id_dziennika){
//	
//	try{
//		// dodanie dziennika do listy dziennik�w
//		ResultSet rs_dzienniki = Polaczenie.MySQL_zapytanie("select * from dzienniki");
//		rs_dzienniki.moveToInsertRow();
//		if(id_dziennika>0) rs_dzienniki.updateInt("id", id_dziennika);
//		rs_dzienniki.updateString("nazwa_dziennika", dz.getNazwa_dziennika());
//		rs_dzienniki.insertRow();
//		rs_dzienniki = Polaczenie.MySQL_zapytanie("select id from dzienniki where nazwa_dziennika='"+dz.getNazwa_dziennika()+"'");
//		rs_dzienniki.first();
//		rs_dzienniki.getInt("id");
//		
//		//wype�nianie dziennika uczniami
//		Statement st = dziennik.main.DziennikMain.connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
//		ResultSet rs1 = Polaczenie.MySQL_zapytanie("select * from uczen_dziennik limit 0"); // pobranie tylko uchwytu do tabeli
//		
//	//	ArrayList <Uczen_klasy> uk = dz.getUczen_klasy();
//		
//		for(int itUk = 0;   itUk < dz.getUczen_klasy().size() ;itUk++) //przej�cie po wszystkich elementach ArrayList <Uczen_klasy>
//		{	
//		Uczen_klasy	 uczen_klasy =  dz.getUczen_klasy().get(itUk);
//		rs1.moveToInsertRow();
//		rs1.updateInt("id_dziennika", rs_dzienniki.getInt("id"));
//		rs1.updateInt("id_ucznia", uczen_klasy.getId());
//		rs1.updateObject("przedmioty", dziennik.main.DziennikMain.polaczenie.serializuj(uczen_klasy.getPrzedmioty()));
//		rs1.updateObject("uwagi", dziennik.main.DziennikMain.polaczenie.serializuj(uczen_klasy.getUwagi()));
//		rs1.insertRow();
//		
//		ResultSet rs2 = st.executeQuery("SELECT * FROM uczen WHERE id="+uczen_klasy.getId());
//		
//		rs2.first();
//		rs2.updateString("dziennik", dz.getNazwa_dziennika());
//		rs2.updateRow();
//		
//		}
//		
//	
//	}
//catch (SQLException e)
//{
//	e.printStackTrace();
//}
//
//};

/**
 * <p> Metoda dodaje ucznia do dziennika 
 * 		wykorzystywana przez edytuj dziennik<p>
 * 
 * @param uczen
 */
	public void dodaj_ucznia_do_dziennika(){
            Polaczenie polaczenie_bean;
                
                // DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie polaczenia)
                FacesContext facesContext = FacesContext.getCurrentInstance();
                Application application = facesContext.getApplication();
                ValueBinding binding = application.createValueBinding("#{polaczenie}");
                polaczenie_bean = (Polaczenie)binding.getValue(facesContext);
                
    Uczen uczen_bean;
                
                // DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie ucznia)
                FacesContext facesContext2 = FacesContext.getCurrentInstance();
                ValueBinding binding2 = application.createValueBinding("#{uczen}");
                uczen_bean = (Uczen)binding2.getValue(facesContext2);
                
		try{
				Statement st = polaczenie_bean.getConn().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
				
				ArrayList<Przedmiot> przedmioty = Przedmiot.nowa_lista_przedmiotow();//tworzy podstawow� liste przedmiot�w
				ArrayList<Uwaga> uwagi = new ArrayList<Uwaga>();//tworzy now� pust� list� uwag
				ResultSet rs_dzienniki = Polaczenie.MySQL_zapytanie("select id from dzienniki where nazwa_dziennika='"+nazwa_wybranego_dziennika+"'");
				rs_dzienniki.first();
				
				
				ResultSet rs = st.executeQuery("select * from uczen_dziennik limit 0");
				rs.moveToInsertRow();
				rs.updateInt("id_ucznia", uczen_bean.getId());
				rs.updateInt("id_dziennika", rs_dzienniki.getInt("id"));
				rs.updateObject("przedmioty", polaczenie_bean.serializuj(przedmioty));
				rs.updateObject("uwagi", polaczenie_bean.serializuj(uwagi));
				rs.insertRow();
				
				rs = st.executeQuery("SELECT * FROM uczen WHERE id="+uczen_bean.getId());
				System.out.println(nazwa_wybranego_dziennika);
				rs.first();
				rs.updateString("dziennik", nazwa_wybranego_dziennika);
				rs.updateRow();
			}
		catch (SQLException e)
			{
			e.printStackTrace();
			}
	};

	
	
//		static public void usun_ucznia_z_dziennika(Dziennik dz, Uczen uczen){
//			try{
//				
//				String zapytanie = "delete from " + dz.getNazwa_dziennika() + " where id='" + uczen.getId()+"'";
//				dziennik.main.DziennikMain.polaczenie.st.executeUpdate(zapytanie);
//			}
//			catch (SQLException e)
//			{
//				e.printStackTrace();
//			}
//		
//			};

/**
 * <p> Usuwa dziennik z bazy <p>
 * 		
 * @param dz
 */
	

public String usun_dziennik(){
	
    Polaczenie polaczenie_bean;
                
                // DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie polaczenia)
                FacesContext facesContext = FacesContext.getCurrentInstance();
                Application application = facesContext.getApplication();
                ValueBinding binding = application.createValueBinding("#{polaczenie}");
                polaczenie_bean = (Polaczenie)binding.getValue(facesContext);
    
	try{
		String zapytanie;
		ResultSet rs_dzienniki = Polaczenie.MySQL_zapytanie("select id from dzienniki where nazwa_dziennika='"+nazwa_wybranego_dziennika+"'");
		rs_dzienniki.first();
		int id_dz = rs_dzienniki.getInt("id");
		ResultSet rs = Polaczenie.MySQL_zapytanie("select * from uczen_dziennik where id_dziennika="+id_dz); 
							
		if(rs.wasNull() == false){
		zapytanie = "delete from uczen_dziennik where id_dziennika=" +id_dz;
		polaczenie_bean.getSt().executeUpdate(zapytanie);
		 }
							
		//usuwa dziennik z listy dziennikow
		Polaczenie.MySQL_zapytanie("select * from dzienniki where nazwa_dziennika='"+nazwa_wybranego_dziennika+"'");
		if (rs.wasNull() == false){
			zapytanie = "DELETE FROM dzienniki where nazwa_dziennika='"+nazwa_wybranego_dziennika+"'";
			polaczenie_bean.getSt().executeUpdate(zapytanie);
			}
		
		Polaczenie.MySQL_zapytanie("select * from uczen where dziennik = '"+nazwa_wybranego_dziennika+"'");
		if(rs.wasNull()==false){
			zapytanie = "Update uczen Set dziennik = NULL WHERE dziennik = '"+nazwa_wybranego_dziennika+"'";
			polaczenie_bean.getSt().executeUpdate(zapytanie);
		}
                    return null;
		}
		catch (SQLException e)
		{
                    e.printStackTrace();
                    return null;
		}
					
};
	
			
/**
 * <p> Metoda edytujaca dziennik <p>
 * 					
 * @param dz
 */
//public void edytuj_dziennik(Dziennik dz){
//							
//	try{
//															
//		Statement st = dziennik.main.DziennikMain.connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
//			
//		//znajdz w bazie id edytowanego dziennika
//		ResultSet znajdz_id_dziennika = Polaczenie.MySQL_zapytanie("SELECT id FROM dzienniki where nazwa_dziennika = '"+dz.getNazwa_dziennika()+"'"); 
//		System.out.println("SELECT id FROM dzienniki where nazwa_dziennika = '"+dz.getNazwa_dziennika()+"'");
//		//int id_dziennika = 0; //deklaracja oraz inicjalizacja zmiennej do kt�rej zostanie wpisany id dziennika
//		
//		
//		znajdz_id_dziennika.first();
//		int id_dziennika = znajdz_id_dziennika.getInt("id"); //przepisanie warto�ci do programu
//		
//		
//		//usuni�cie niepotrzebnych uczni�w z listy
//		ResultSet lista_uczniow = Polaczenie.MySQL_zapytanie("SELECT * FROM uczen_dziennik where id_dziennika = "+id_dziennika);
//		
//		while(lista_uczniow.next())
//		{
//			//boolean usun = false;
//			boolean znaleziono = false;
//				int i = 0;
//				for(; i < dz.getUczen_klasy().size(); i++) 
//				{
//				 if(dz.getUczen_klasy().get(i).getId() == lista_uczniow.getInt("id_ucznia") )
//					znaleziono = true;
//				}
//			    
//			
//			if(!znaleziono )
//			{
//				//lista_uczniow.updateInt("dziennik_id",0);
//			String zapytanie = "UPDATE uczen_dziennik SET id_dziennika = NULL where id_ucznia = "+lista_uczniow.getInt("id_ucznia") ;
//			dziennik.main.DziennikMain.polaczenie.st.executeUpdate(zapytanie);
//			zapytanie = "UPDATE uczen Set dziennik = NULL where id = "+lista_uczniow.getInt("id_ucznia");
//			dziennik.main.DziennikMain.polaczenie.st.executeUpdate(zapytanie);
//			}
//		}
//		
//		
//		
//		ResultSet rs;
//		int id_ucznia;
//		
//			
//		for(int i = 0; i < dz.getUczen_klasy().size() ; i++) 
//		{
//		//szukanie kazdego z uczniow w tabeli uczen_dziennik
//			id_ucznia = dz.getUczen_klasy().get(i).getId(); //pobierz id ucznia
//
//		 
//			rs = Polaczenie.MySQL_zapytanie("SELECT * FROM uczen where id= "+id_ucznia); //znajdz dziennik do ktorego obecnie przypisany jest uczen
//		 
//		 
//			rs.first(); //przej�cie do znalezionego ucznia
//			rs.getString("dziennik");
//		 
//			if(rs.wasNull()) //je�li nie jest przypisany do zadnego dziennika
//			{
//				
//				//sprawdz czy czeka na przeniesienie do dziennika (istnieje wpis w tabeli uczen_dziennik z id_dziennika NULL
//				String zapytanie = "SELECT COUNT(*) as jest_taki_uczen FROM uczen_dziennik WHERE id_ucznia = "+id_ucznia+ " AND id_dziennika IS NULL ";
//				ResultSet sprawdz = Polaczenie.MySQL_zapytanie(zapytanie);
//				sprawdz.first();
//				if(sprawdz.getInt("jest_taki_uczen") == 1)
//				{
//					rs = Polaczenie.MySQL_zapytanie("SELECT * FROM uczen_dziennik where id_ucznia= "+id_ucznia);
//					rs.first();
//					rs.updateInt("id_dziennika", id_dziennika); //zmiana id dziennika w tabeli uczen_dziennik
//					rs.updateRow();
//					
//					rs = Polaczenie.MySQL_zapytanie("SELECT * FROM uczen where id= "+id_ucznia);
//					rs.first();
//					rs.updateString("dziennik", dz.getNazwa_dziennika());
//					rs.updateRow();
//					
//				}
//				
//				
//				
//				else{
//				//w metodzie dodaj ucznia do dziennika wykorzystujemy tylko id ucznia
//				Uczen u = new Uczen();
//				u.setId(id_ucznia);
//			 
//				dodaj_ucznia_do_dziennika( dz, u);
//				}
//			}
//			
//			else if(!rs.getString("dziennik").equals(dz.getNazwa_dziennika()) )
//																	//ucze� znajduje si� w innym dzienniku trzeba go przenie��
//			{
//				rs = Polaczenie.MySQL_zapytanie("SELECT * FROM uczen_dziennik where id_ucznia= "+id_ucznia);
//				rs.first();
//				rs.updateInt("id_dziennika", id_dziennika); //zmiana id dziennika w tabeli uczen_dziennik
//				rs.updateRow();
//				
//				rs = Polaczenie.MySQL_zapytanie("SELECT * FROM uczen where id= "+id_ucznia);
//				rs.first();
//				rs.updateString("dziennik", dz.getNazwa_dziennika());
//				rs.updateRow();
//			}
//		
//			
//		
//			
//		}
//	
//								
//		
//		}				
//		catch (SQLException e)
//		{
//			e.printStackTrace();
//		}
//
//}	

public void generateLoginAndPassword(){
	
    Uczen uczen_bean;
                
        // DKA: pobieranie obiektu ziarna z application scope (w tym wypadku pobranie ucznia)
        FacesContext facesContext2 = FacesContext.getCurrentInstance();
        Application application = facesContext2.getApplication();
        ValueBinding binding2 = application.createValueBinding("#{uczen}");
        uczen_bean = (Uczen)binding2.getValue(facesContext2);
    
        String text="";
        if (uczen_bean.getImie_rodzica().length()>0) text=text+uczen_bean.getImie_rodzica().charAt(0);
        if (uczen_bean.getNazwisko_rodzica().length()>0) text=text+uczen_bean.getNazwisko_rodzica();		
        uczen_bean.setLogin(text);
        uczen_bean.setHaslo(text);
}

public void generateLoginAndPassword_n(){
	
        String text="";
        if (nauczyciel.getImie().length()>0) text=text+nauczyciel.getImie().charAt(0);
        if (nauczyciel.getNazwisko().length()>0) text=text+nauczyciel.getNazwisko();		
        nauczyciel.setLogin(text);
        nauczyciel.setHaslo(text);
}

	

}